home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Visual Database / Visual dBase v5.5 / SAMPLES1.PAK / ORDERS.WFM < prev    next >
Text File  |  1995-07-18  |  27KB  |  870 lines

  1. *******************************************************************************
  2. *  PROGRAM:      Orders.wfm
  3. *
  4. *  WRITTEN BY:   Borland Samples Group
  5. *
  6. *  DATE:         1/94
  7. *
  8. *  UPDATED:      5/95
  9. *
  10. *  REVISION:     $Revision:   1.97  $
  11. *
  12. *  VERSION:      Visual dBASE
  13. *
  14. *  DESCRIPTION:  This form displays information about an order from a company.
  15. *                It allows traversing through orders and going to the top and
  16. *                bottom.  This form also has a corresponding menu, OrdCust.mnu,
  17. *                which allows adding,deleting and searching for an order.
  18. *                When an unknown customer number is entered, a dialog will come
  19. *                up asking you if you want to add a new customer.  If you
  20. *                selecte the Yes button, the Customer form (in customer.wfm)
  21. *                will be opened, so a new customer can be added.
  22. *
  23. *  PARAMETERS:   None
  24. *
  25. *  CALLS:        Orders.mnu       (Menu file)
  26. *                Buttons.cc       (Custom controls file)
  27. *                Customer.wfm     (Form for displaying customer information)
  28. *                Orders.qbe       (View of tables)
  29. *
  30. *  USAGE:        DO Orders.wfm    && Note that you can also DO Customer.wfm
  31. *
  32. *******************************************************************************
  33. #include <Messdlg.h>
  34. shell(.F., .T.)
  35. create session
  36. set talk off
  37. set ldCheck off                        && To avoid language driver conflicts
  38.  
  39. ** END HEADER -- do not remove this line*
  40. * Generated on 07/11/95
  41. *
  42. parameter bModal
  43. local f
  44. f = new ORDERSFORM()
  45. if (bModal)
  46.    f.mdi = .F. && ensure not MDI
  47.    f.ReadModal()
  48. else
  49.    f.Open()
  50. endif
  51. CLASS ORDERSFORM OF FORM
  52.    Set Procedure To &_dbwinhome.samples\BUTTONS.CC additive
  53.    this.Width = 92.666
  54.    this.MenuFile = "ORDERS.MNU"
  55.    this.View = "ORDERS.QBE"
  56.    this.OnClose = CLASS::ONCLOSE
  57.    this.EscExit = .F.
  58.    this.Top = 0
  59.    this.MousePointer = 1
  60.    this.Left = 3.333
  61.    this.ColorNormal = "BtnText/BtnFace"
  62.    this.Text = "Orders -- View Mode"
  63.    this.Height = 20.8232
  64.    this.Maximize = .F.
  65.    this.Minimize = .F.
  66.  
  67.    DEFINE RECTANGLE ORDERCUSTRECT OF THIS;
  68.        PROPERTY;
  69.          Width 75.6504,;
  70.          Top 0.3486,;
  71.          Left 0.8486,;
  72.          ColorNormal "BtnFace",;
  73.          Text "Order Info",;
  74.          Height 2.7686
  75.  
  76.    DEFINE RECTANGLE PAYMENTRECT OF THIS;
  77.        PROPERTY;
  78.          Width 33.9834,;
  79.          Top 10.5684,;
  80.          Left 0.8486,;
  81.          ColorNormal "BtnFace",;
  82.          Text "Totals",;
  83.          Height 6.0781
  84.  
  85.    DEFINE RECTANGLE SHIPRECT OF THIS;
  86.        PROPERTY;
  87.          Width 75.6504,;
  88.          Top 16.8184,;
  89.          Left 0.8486,;
  90.          ColorNormal "BtnFace",;
  91.          Text "Ship Info",;
  92.          Height 3.416
  93.  
  94.    DEFINE TEXT ORDERNOTEXT OF THIS;
  95.        PROPERTY;
  96.          Width 10.9512,;
  97.          Top 1.2393,;
  98.          Left 2.5488,;
  99.          ColorNormal "B/BtnFace",;
  100.          Text "Order No:",;
  101.          Height 1.2305,;
  102.          Alignment 5
  103.  
  104.    DEFINE ENTRYFIELD ORDERNOENTRY OF THIS;
  105.        PROPERTY;
  106.          Width 6.8838,;
  107.          Top 1.1895,;
  108.          Left 14.4482,;
  109.          ColorNormal "N/BtnFace",;
  110.          Height 1.1631,;
  111.          Enabled .F.,;
  112.          DataLink "ORDERS->ORDER_NO",;
  113.          OnChange CLASS::CHANGESMADE
  114.  
  115.    DEFINE TEXT CUSTOMERNOTEXT OF THIS;
  116.        PROPERTY;
  117.          Width 13.165,;
  118.          Top 1.2393,;
  119.          Left 25.5,;
  120.          ColorNormal "B/BtnFace",;
  121.          Text "Customer No:",;
  122.          Height 1.2305,;
  123.          Alignment 5
  124.  
  125.    DEFINE ENTRYFIELD CUSTOMERNOENTRY OF THIS;
  126.        PROPERTY;
  127.          Width 6.0654,;
  128.          Top 1.1895,;
  129.          Left 39.0986,;
  130.          ColorNormal "N/BtnFace",;
  131.          Height 1.1631,;
  132.          Enabled .F.,;
  133.          DataLink "ORDERS->CUSTOMER_N",;
  134.          OnChange CLASS::CHANGESMADE
  135.  
  136.    DEFINE TEXT SALEDATETEXT OF THIS;
  137.        PROPERTY;
  138.          Width 12.915,;
  139.          Top 1.2393,;
  140.          Left 46.75,;
  141.          ColorNormal "B/BtnFace",;
  142.          Text "&Sale Date:",;
  143.          Height 1.2305,;
  144.          Alignment 5
  145.  
  146.    DEFINE SPINBOX SALEDATESPIN OF THIS;
  147.        PROPERTY;
  148.          ColorHighlight "B+/W*",;
  149.          Rangemax 100,;
  150.          Width 13.6338,;
  151.          Rangemin 0,;
  152.          Top 1.1895,;
  153.          Left 61.1982,;
  154.          ColorNormal "N/BtnFace",;
  155.          Height 1.1631,;
  156.          Enabled .F.,;
  157.          DataLink "ORDERS->SALE_DATE",;
  158.          OnChange CLASS::CHANGESMADE
  159.  
  160.    DEFINE RECTANGLE LINEITEMSRECT OF THIS;
  161.        PROPERTY;
  162.          Width 75.6504,;
  163.          Top 3.3799,;
  164.          Left 0.8486,;
  165.          ColorNormal "BtnFace",;
  166.          Text "&Line Items",;
  167.          Height 7.0313
  168.  
  169.    DEFINE BROWSE CHILDBROWSE OF THIS;
  170.        PROPERTY;
  171.          Width 73.9668,;
  172.          Fields "STOCK_NO\13,QTY\14,SELL_PRICE\16,TOTAL = SELL_PRICE*QTY\16",;
  173.          Top 4.4697,;
  174.          Left 1.6982,;
  175.          CUATab .T.,;
  176.          ColorNormal "BtnText/BtnFace",;
  177.          ColorHighlight "B+/W*",;
  178.          Height 5.4121,;
  179.          Modify .F.,;
  180.          OnNavigate CLASS::BROWSEONNAVIGATE,;
  181.          ShowRecNo .F.,;
  182.          Alias "Lineitem",;
  183.          OnChange CLASS::BROWSECHANGESMADE,;
  184.          ShowDeleted .F.,;
  185.          Delete .F.,;
  186.          Append .F.
  187.  
  188.    DEFINE TEXT TOTINVTEXT OF THIS;
  189.        PROPERTY;
  190.          Width 13.6338,;
  191.          Top 11.6182,;
  192.          Left 1.6982,;
  193.          ColorNormal "B/BtnFace",;
  194.          Text "Total Invoice:",;
  195.          Height 1.0869,;
  196.          Alignment 8
  197.  
  198.    DEFINE ENTRYFIELD TOTINVENTRY OF THIS;
  199.        PROPERTY;
  200.          Width 17,;
  201.          Top 11.6182,;
  202.          Left 17,;
  203.          ColorHighlight "B+/W*",;
  204.          ColorNormal "N/BtnFace",;
  205.          Function "J",;
  206.          Height 1.0283,;
  207.          Enabled .F.,;
  208.          DataLink "ORDERS->TOTAL",;
  209.          Picture "9,999,999.99"
  210.  
  211.    DEFINE TEXT TOTPAIDTEXT OF THIS;
  212.        PROPERTY;
  213.          Width 13.1338,;
  214.          Top 13.1299,;
  215.          Left 1.6982,;
  216.          ColorNormal "B/BtnFace",;
  217.          Text "A&mount Paid:",;
  218.          Height 0.9873,;
  219.          Alignment 8
  220.  
  221.    DEFINE ENTRYFIELD AMTPAIDENTRY OF THIS;
  222.        PROPERTY;
  223.          Width 17,;
  224.          Top 13.1299,;
  225.          Left 17,;
  226.          ColorHighlight "B+/W*",;
  227.          ColorNormal "N/BtnFace",;
  228.          Function "J",;
  229.          Height 0.9873,;
  230.          Enabled .F.,;
  231.          DataLink "ORDERS->AMT_PAID",;
  232.          OnChange CLASS::AMTPAIDONCHANGE,;
  233.          Picture "9,999,999.99"
  234.  
  235.    DEFINE TEXT BALDUETEXT OF THIS;
  236.        PROPERTY;
  237.          Width 13.1338,;
  238.          Top 14.6484,;
  239.          Left 1.6982,;
  240.          ColorNormal "B/BtnFace",;
  241.          Text "Balance Due:",;
  242.          Height 0.998,;
  243.          Alignment 8
  244.  
  245.    DEFINE ENTRYFIELD BALDUEENTRY OF THIS;
  246.        PROPERTY;
  247.          Width 17,;
  248.          Top 14.6484,;
  249.          Left 17,;
  250.          ColorHighlight "B+/W*",;
  251.          ColorNormal "N/BtnFace",;
  252.          Function "J",;
  253.          Height 0.998,;
  254.          Enabled .F.,;
  255.          Value 0,;
  256.          Picture "9,999,999.99"
  257.  
  258.    DEFINE RECTANGLE TERMSRECT OF THIS;
  259.        PROPERTY;
  260.          Width 16.1338,;
  261.          Top 10.5684,;
  262.          Left 35.6982,;
  263.          ColorNormal "BtnFace",;
  264.          Text "&Terms",;
  265.          Height 6.0781
  266.  
  267.    DEFINE RADIOBUTTON TERMSFOB OF THIS;
  268.        PROPERTY;
  269.          Width 12.7656,;
  270.          Group .T.,;
  271.          Top 11.2295,;
  272.          Left 37.3984,;
  273.          ColorNormal "N/BtnFace",;
  274.          Text "FOB",;
  275.          Height 1.2402,;
  276.          Enabled .F.,;
  277.          DataLink "TERMS",;
  278.          OnChange CLASS::CHANGESMADE
  279.  
  280.    DEFINE RADIOBUTTON TERMSNET30 OF THIS;
  281.        PROPERTY;
  282.          Width 12.7656,;
  283.          Group .F.,;
  284.          Top 12.2988,;
  285.          Left 37.3984,;
  286.          ColorNormal "N/BtnFace",;
  287.          Text "Net 30",;
  288.          Height 1.2305,;
  289.          Enabled .F.,;
  290.          DataLink "TERMS",;
  291.          OnChange CLASS::CHANGESMADE
  292.  
  293.    DEFINE RECTANGLE PAYMETHODRECT OF THIS;
  294.        PROPERTY;
  295.          Width 23.8008,;
  296.          Top 10.6094,;
  297.          Left 52.6982,;
  298.          ColorNormal "BtnFace",;
  299.          Text "Pa&yment Method",;
  300.          Height 6.0371
  301.  
  302.    DEFINE RADIOBUTTON PAYCHECK OF THIS;
  303.        PROPERTY;
  304.          Width 12.7656,;
  305.          Group .T.,;
  306.          Top 11.3984,;
  307.          Left 54.3984,;
  308.          ColorNormal "N/BtnFace",;
  309.          Text "Check",;
  310.          Height 1.0127,;
  311.          Enabled .F.,;
  312.          DataLink "PAY_METHOD",;
  313.          OnChange CLASS::CHANGESMADE,;
  314.          ID 1
  315.  
  316.    DEFINE RADIOBUTTON PAYCREDIT OF THIS;
  317.        PROPERTY;
  318.          Width 12.7656,;
  319.          Group .F.,;
  320.          Top 12.4688,;
  321.          Left 54.3984,;
  322.          ColorNormal "N/BtnFace",;
  323.          Text "Credit",;
  324.          Height 0.6484,;
  325.          Enabled .F.,;
  326.          DataLink "PAY_METHOD",;
  327.          OnChange CLASS::CHANGESMADE,;
  328.          ID 1
  329.  
  330.    DEFINE RADIOBUTTON PAYMC OF THIS;
  331.        PROPERTY;
  332.          Width 12.7656,;
  333.          Group .F.,;
  334.          Top 13.3594,;
  335.          Left 54.3984,;
  336.          ColorNormal "N/BtnFace",;
  337.          Text "MC",;
  338.          Height 0.7578,;
  339.          Enabled .F.,;
  340.          DataLink "PAY_METHOD",;
  341.          OnChange CLASS::CHANGESMADE
  342.  
  343.    DEFINE RADIOBUTTON PAYCASH OF THIS;
  344.        PROPERTY;
  345.          Width 12.7656,;
  346.          Group .F.,;
  347.          Top 14.3184,;
  348.          Left 54.3984,;
  349.          ColorNormal "N/BtnFace",;
  350.          Text "Cash",;
  351.          Height 0.9756,;
  352.          Enabled .F.,;
  353.          DataLink "PAY_METHOD",;
  354.          OnChange CLASS::CHANGESMADE
  355.  
  356.    DEFINE RADIOBUTTON PAYVISA OF THIS;
  357.        PROPERTY;
  358.          Width 10.9346,;
  359.          Group .F.,;
  360.          Top 15.3281,;
  361.          Left 54.3984,;
  362.          ColorNormal "N/BtnFace",;
  363.          Text "Visa",;
  364.          Height 1.0244,;
  365.          Enabled .F.,;
  366.          DataLink "PAY_METHOD",;
  367.          OnChange CLASS::CHANGESMADE
  368.  
  369.    DEFINE TEXT SHIPDATETEXT OF THIS;
  370.        PROPERTY;
  371.          Width 12.7969,;
  372.          Top 17.7686,;
  373.          Left 1.8682,;
  374.          ColorNormal "B/BtnFace",;
  375.          Text "S&hip Date:",;
  376.          Height 0.7012,;
  377.          Alignment 5
  378.  
  379.    DEFINE SPINBOX SHIPDATESPIN OF THIS;
  380.        PROPERTY;
  381.          Rangemax 100,;
  382.          Width 17.332,;
  383.          Rangemin 0,;
  384.          Top 17.3486,;
  385.          Left 17,;
  386.          ColorHighlight "B+/W*",;
  387.          ColorNormal "N/BtnFace",;
  388.          Height 1.1807,;
  389.          Enabled .F.,;
  390.          DataLink "ORDERS->SHIP_DATE",;
  391.          OnChange CLASS::CHANGESMADE
  392.  
  393.    DEFINE TEXT SHIPVIATEXT OF THIS;
  394.        PROPERTY;
  395.          Width 11.2676,;
  396.          Top 18.8389,;
  397.          Left 3.3984,;
  398.          ColorNormal "B/BtnFace",;
  399.          Text "Ship &Via:",;
  400.          Height 1.2197,;
  401.          Alignment 5
  402.  
  403.    DEFINE RADIOBUTTON SHIPDHL OF THIS;
  404.        PROPERTY;
  405.          Width 10.1504,;
  406.          Group .T.,;
  407.          Top 19.1895,;
  408.          Left 17.8486,;
  409.          ColorNormal "N/BtnFace",;
  410.          Text "DHL",;
  411.          Height 0.8105,;
  412.          Enabled .F.,;
  413.          DataLink "SHIP_VIA",;
  414.          OnChange CLASS::CHANGESMADE
  415.  
  416.    DEFINE RADIOBUTTON SHIPEMERY OF THIS;
  417.        PROPERTY;
  418.          Width 10.1016,;
  419.          Group .F.,;
  420.          Top 19.1895,;
  421.          Left 28.8984,;
  422.          ColorNormal "N/BtnFace",;
  423.          Text "Emery",;
  424.          Height 0.8105,;
  425.          Enabled .F.,;
  426.          DataLink "SHIP_VIA",;
  427.          OnChange CLASS::CHANGESMADE
  428.  
  429.    DEFINE RADIOBUTTON SHIPFEDEX OF THIS;
  430.        PROPERTY;
  431.          Width 10.2334,;
  432.          Group .F.,;
  433.          Top 19.1895,;
  434.          Left 39.0986,;
  435.          ColorNormal "N/BtnFace",;
  436.          Text "FedEx",;
  437.          Height 0.8105,;
  438.          Enabled .F.,;
  439.          DataLink "SHIP_VIA",;
  440.          OnChange CLASS::CHANGESMADE
  441.  
  442.    DEFINE RADIOBUTTON SHIPUPS OF THIS;
  443.        PROPERTY;
  444.          Width 10.1836,;
  445.          Group .F.,;
  446.          Top 19.1895,;
  447.          Left 50.1484,;
  448.          ColorNormal "N/BtnFace",;
  449.          Text "UPS",;
  450.          Height 0.8105,;
  451.          Enabled .F.,;
  452.          DataLink "SHIP_VIA",;
  453.          OnChange CLASS::CHANGESMADE
  454.  
  455.    DEFINE RADIOBUTTON SHIPUSMAIL OF THIS;
  456.        PROPERTY;
  457.          Width 12.8008,;
  458.          Group .F.,;
  459.          Top 19.1895,;
  460.          Left 61.1982,;
  461.          ColorNormal "N/BtnFace",;
  462.          Text "US Mail",;
  463.          Height 0.8105,;
  464.          Enabled .F.,;
  465.          DataLink "SHIP_VIA",;
  466.          OnChange CLASS::CHANGESMADE
  467.  
  468.    DEFINE PREVBUTTON PREVORDERBUTTON OF THIS;
  469.        PROPERTY;
  470.          Width 14.1504,;
  471.          Group .T.,;
  472.          Top 0.7988,;
  473.          Left 77.3486,;
  474.          Height 1.5537,;
  475.          OnClick CLASS::PREVIOUS
  476.  
  477.    DEFINE NEXTBUTTON NEXTORDERBUTTON OF THIS;
  478.        PROPERTY;
  479.          Width 14.1504,;
  480.          Group .F.,;
  481.          Top 3.1484,;
  482.          Left 77.3486,;
  483.          Height 1.5566,;
  484.          OnClick CLASS::NEXT,;
  485.          Default .T.
  486.  
  487.    DEFINE PUSHBUTTON FIRSTORDERBUTTON OF THIS;
  488.        PROPERTY;
  489.          Width 14.1504,;
  490.          Group .F.,;
  491.          Top 5.2295,;
  492.          Left 77.3486,;
  493.          ColorNormal "",;
  494.          Text "F&irst",;
  495.          Height 1.5352,;
  496.          OnClick {;form.CheckCommit(form.inEditMode);go top}
  497.  
  498.    DEFINE PUSHBUTTON LASTORDERBUTTON OF THIS;
  499.        PROPERTY;
  500.          Width 14.1504,;
  501.          Group .F.,;
  502.          Top 7.4189,;
  503.          Left 77.3486,;
  504.          ColorNormal "",;
  505.          Text "L&ast",;
  506.          Height 1.5215,;
  507.          OnClick {;form.CheckCommit(form.inEditMode);go bottom}
  508.  
  509.    DEFINE IMAGE LOGOIMAGE OF THIS;
  510.        PROPERTY;
  511.          Width 15.3154,;
  512.          Top 17.3486,;
  513.          Left 77.3486,;
  514.          Height 2.8271,;
  515.          DataSource "FILENAME DIVESHOP.BMP",;
  516.          Alignment 1
  517.  
  518.    DEFINE SAMPLEINFOBUTTON ORDERSINFOBUTTON OF THIS;
  519.        PROPERTY;
  520.          Width 3.5654,;
  521.          Group .T.,;
  522.          Top 9.5,;
  523.          Left 87.5986,;
  524.          Height 1.2051
  525.  
  526.    procedure Open
  527.    ****************************************************************************
  528.    private orderNoField
  529.  
  530.    if type("form.init") = "U"
  531.       form.init = .T.
  532.  
  533.       set skip to                     && orders.qbe contains set skip to lineitem
  534.       set exact off                   && the .qbe file contains SET EXACT ON
  535.  
  536.       set procedure to &_dbwinhome.samples\Sampproc.prg additive
  537.  
  538.       form.inEditMode = .F.           && indicator of view/edit state
  539.       form.changesMade = .F.          && indicator of changes made to field values
  540.       form.previousRecord = .F.       && Save record number when appending
  541.  
  542.       *** do calculations in another area so form doesn't get updated
  543.       use orders again in select() alias temp
  544.       select temp
  545.       orderNoField = field(1)         && order_no field
  546.       set order to &orderNoField      && order_no -- tag name is same as field
  547.       go bottom
  548.       form.maxOrder = &orderNoField   && max value for key field -- for creating
  549.                                       && new orders
  550.       use in temp
  551.       select orders
  552.       ***
  553.  
  554.       *** Open table for calculating totals and balance due in another work area
  555.       *** so that datalinks are not affected by record movements
  556.  
  557.       use lineitem again in select() alias lineitem2 order tag order_no
  558.       select orders
  559.       set relation to order_no into lineitem2 constrain integrity additive
  560.  
  561.       ***
  562.  
  563.       if type("form.parentCustomerForm") <> "U" && Esc ok if have parent
  564.          form.escExit = .T.
  565.       endif
  566.  
  567.    endif
  568.    form.ordersInfoButton.sampleName = "Orders.wfm"
  569.    form.BrowseOnNavigate()              && calculate totals
  570.    form::Open()                         && Now the form actually opens
  571.  
  572.  
  573.    ****************************************************************************
  574.  
  575.    procedure OnClose
  576.    ****************************************************************************
  577.  
  578.    if form.inEditMode
  579.       form.ViewEdit()
  580.    endif
  581.                                              && Close Customer form if it exists
  582.    if .not. type ("form.childCustomerForm") $ "U,L"
  583.       form.childCustomerForm.Release()
  584.       close procedure &_dbwinhome.samples\Customer.wfm
  585.    endif
  586.    if type("form.parentCustomerForm") = "U"  && If called from Customer,
  587.                                              && leave shell(.F.)
  588.       shell(.T.)
  589.    endif
  590.  
  591.    close procedure &_dbwinhome.samples\SampProc.prg,;
  592.       &_dbwinhome.samples\Buttons.cc
  593.  
  594.  
  595.    ****************************************************************************
  596.  
  597.    procedure BrowseOnNavigate
  598.  
  599.    * calculate total invoice and balance
  600.    ****************************************************************************
  601.  
  602.    if eof()
  603.       form.root.order.viewEdit.enabled = .F.
  604.    else
  605.       form.root.order.viewEdit.enabled = .T.
  606.       form.balDueEntry.value = orders->total - form.AmtPaidEntry.value
  607.       show object form.balDueEntry
  608.    endif
  609.    form.CallShowCustomer()
  610.  
  611.  
  612.    ****************************************************************************
  613.  
  614.    procedure ChangesMade
  615.  
  616.    * Indicate that changes have been made to current record.
  617.    ****************************************************************************
  618.  
  619.    form.changesMade = .T.
  620.  
  621.    ****************************************************************************
  622.  
  623.    procedure BrowseChangesMade
  624.    ****************************************************************************
  625.    local t
  626.  
  627.    form.changesMade = .T.
  628.    go recno("LINEITEM") in lineitem    && Make sure change is posted
  629.    select lineitem2                    && recalculate totals in other workarea
  630.    calculate sum(lineitem2->sell_price * lineitem2->qty) to t
  631.    select orders
  632.    replace orders->total with t
  633.    form.balDueEntry.value = orders->total - orders->amt_paid
  634.  
  635.  
  636.    ****************************************************************************
  637.  
  638.    procedure AmtPaidOnChange
  639.    ****************************************************************************
  640.  
  641.    form.changesMade = .T.
  642.    form.BrowseOnNavigate()                    && calculate totals
  643.  
  644.  
  645.    ****************************************************************************
  646.  
  647.    procedure Next
  648.    ****************************************************************************
  649.  
  650.    form.CheckCommit(form.inEditMode)
  651.    if .not. eof()
  652.       NEXTBUTTON::OnClick()
  653.    endif
  654.  
  655.  
  656.    ****************************************************************************
  657.  
  658.    procedure Previous
  659.    ****************************************************************************
  660.  
  661.    form.CheckCommit(form.inEditMode)
  662.    PREVBUTTON::OnClick()
  663.  
  664.  
  665.    ****************************************************************************
  666.  
  667.    procedure CheckCommit (newInEditMode)
  668.  
  669.    * Finish transaction, if it has been started.
  670.    ****************************************************************************
  671.    private orderField, changesMade
  672.  
  673.    changesMade = form.changesMade
  674.    if form.changesMade
  675.       orderField = field(1)                  && Field Order_no
  676.       if ConfirmationMessage("Commit changes?",;
  677.                               FormatStr("Order %1",&orderField)) = YES
  678.          commit()
  679.       else
  680.          rollback()
  681.          if .not. empty(form.previousRecord)
  682.             go form.previousRecord
  683.             form.previousRecord = .F.
  684.          endif
  685.       endif
  686.       if form.inEditMode .and. newInEditMode
  687.          begintrans()
  688.       endif
  689.       form.changesMade = .F.
  690.    endif
  691.    if form.inEditMode <> newInEditMode
  692.       if newInEditMode                       && Going to Edit mode
  693.          begintrans()
  694.       else                                   && Going to View mode
  695.          if .not. changesMade
  696.             rollback()
  697.          endif
  698.       endif
  699.       form.inEditMode = newInEditMode
  700.    endif
  701.  
  702.    ****************************************************************************
  703.  
  704.    procedure ViewEdit
  705.    ****************************************************************************
  706.    local inEditMode, control, editMenu
  707.  
  708.    editMenu = form.root.order.viewEdit
  709.  
  710.    *** If editing is completed, close transaction, otherwise open a transaction
  711.    if form.inEditMode                           && Change to View mode
  712.       form.checkChanged(.F.)
  713.       editMenu.text = "&Edit"
  714.       editMenu.shortcut = "Ctrl-E"
  715.       editMenu.statusMessage = "Edit data."
  716.       form.root.order.delete.enabled = .F.      && disabled in view mode
  717.       form.CheckCommit(.F.)                     && Check transaction and
  718.       form.text = "Orders -- View Mode"         && change mode to View
  719.       form.childBrowse.modify = .F.
  720.       form.statusMessage = "Select Order - Edit menu choice to " +;
  721.                            "edit/delete data."
  722.    else                                         && Change to Edit mode
  723.       editMenu.text = "&View"
  724.       editMenu.shortcut = "Ctrl-E"
  725.       editMenu.statusMessage = "View data."
  726.       form.root.order.delete.enabled = .T.      && enabled in edit mode
  727.       form.CheckCommit(.T.)                     && Check transaction and
  728.       form.text = "Orders -- Edit Mode"         && change mode to Edit
  729.       form.childBrowse.modify = .T.
  730.       form.statusMessage = "In Edit Mode.  " +;
  731.                            "Select Order - View menu choice to switch " +;
  732.                            "to View mode."
  733.    endif
  734.    form.childBrowse.setFocus()
  735.    control = form.first
  736.  
  737.    inEditMode = form.inEditMode    && so don't have to reference many times
  738.    do
  739.       do case
  740.          case control.name $ "ORDERNOENTRY,CUSTOMERNOENTRY,TOTINVENTRY,BALDUEENTRY"
  741.             * these are never editable
  742.             control.enabled = .F.
  743.          case .not. control.className $ "BROWSE,NEXTBUTTON,PREVBUTTON,PUSHBUTTON,IMAGE,TEXT"
  744.             * doesn't make sense to make the above classes enabled/not
  745.             control.enabled = inEditMode
  746.          case control.className = "BROWSE"
  747.             control.Modify = inEditMode
  748.             control.Delete = inEditMode
  749.             control.Append = inEditMode
  750.       endcase
  751.       control = control.before
  752.    until control.name = form.first.name
  753.    form.CustomerNoEntry.enabled = .F.       && Key field is always disabled
  754.    form.OrderNoEntry.enabled = .F.          && Key field is always disabled
  755.    form.setFocus()
  756.  
  757.  
  758.    ****************************************************************************
  759.  
  760.    procedure CheckChanged(callCommit)
  761.  
  762.    * Check if changes have been made to the current entryfield.  This procedure
  763.    * is called from menu routines to make sure the form.changesMade gets
  764.    * updated when a menu is selected while the changed control has focus.
  765.    ****************************************************************************
  766.    private control, fieldValue, controlValue, typeText, typeValue
  767.  
  768.    if form.inEditMode
  769.       control = form.activeControl
  770.       if type("control.datalink") <> "U"
  771.          fieldValue = control.datalink          && name of table field
  772.  
  773.          typeText = type("control.text")
  774.          typeValue = type("control.value")
  775.          do case
  776.             case typeValue = "C"
  777.                controlValue = control.value
  778.             case typeValue $ "LU" .and. typeText = "C"
  779.                controlValue = control.text
  780.             otherwise
  781.                controlValue = Null
  782.          endcase
  783.          if controlValue <> &fieldValue
  784.             form.changesMade = .T.
  785.          endif
  786.       endif
  787.    endif
  788.    if form.changesMade .and. callCommit
  789.       CLASS::CheckCommit(form.inEditMode)     && Check transactions
  790.    endif
  791.  
  792.  
  793.  
  794.  
  795.    ****************************************************************************
  796.  
  797.    procedure StartCustomerForm
  798.  
  799.    * Starts the Customer form in it's own session.  Note that control returns
  800.    * to the current session when this procedure is returned from.  This means
  801.    * that between the create session command and return you cannot access
  802.    * tables in the current session.
  803.    ****************************************************************************
  804.    local custNo
  805.  
  806.    custNo = orders->customer_n            && Pass customer_n into into
  807.                                           && customer form in the new session
  808.    create session
  809.    set talk off                           && Set these for the new session
  810.    set ldCheck off
  811.  
  812.    set procedure to &_dbwinhome.samples\Customer.wfm additive
  813.    form.childCustomerForm = new CustomerForm()  && Use Customer.wfm to view
  814.                                                 && or edit a customer
  815.    form.childCustomerForm.top  =  2.02
  816.    form.childCustomerForm.left =  4.25
  817.    form.childCustomerForm.customer_n = custNo
  818.    form.childCustomerForm.parentOrdersForm = form   && Store a reference to this
  819.                                                     && form so that Orders can
  820.                                                     && call events in this form
  821.    form.childCustomerForm.open()
  822.  
  823.  
  824.    ****************************************************************************
  825.  
  826.    procedure CallShowCustomer
  827.  
  828.    * Synchronizes the Customer form to the same customer.  This is done when
  829.    * Orders is run first (form.parentCustomerForm is undefined), and the
  830.    * Customer form has been opened (form.childCustomerForm is defined).
  831.    ****************************************************************************
  832.  
  833.    if type("form.parentCustomerForm") = "U"        && Orders is the parent form
  834.       if type ("form.childCustomerForm") <> "U"    && Customer form defined
  835.          form.childCustomerForm.ShowCustomer(orders->customer_n)
  836.       endif
  837.    endif
  838.  
  839.  
  840.    ****************************************************************************
  841.  
  842.    procedure ShowOrders(custNo, orderNo)
  843.  
  844.    * Called by Customer.wfm when it is the first form run.  Used to synchronize
  845.    * this form to the same customer for a given order displayed in Customer.
  846.    ****************************************************************************
  847.    private pCustNo
  848.  
  849.    form.CheckChanged(.T.)
  850.    set order to custord                   && Order is customer_n + order_no
  851.    pCustNo = custNo                       && Parameters are local so cannot macro
  852.    form.customer_n = custNo               && For adding new orders
  853.    set key to "&pCustNo"                  && Only see corresponding orders
  854.    go top
  855.    seek custNo + orderNo
  856.  
  857.  
  858. ENDCLASS
  859.  
  860.  
  861.  
  862.  
  863.  
  864.  
  865.  
  866.  
  867.  
  868.  
  869.  
  870.